# 作者：詹广权
# 版权所有：www.cdsjcc.cn/su-xz
# 说明：负责加载扩展程序和管理菜单
# 功能：提供插件扩展程序的加载和菜单管理功能，支持动态加载扩展。

# 移除直接引用，避免循环依赖
# require File.join(File.dirname(__FILE__), 'gy.rb')

module SuXZ
  # 加载扩展程序和菜单管理功能
  module KZ
    # 存储主菜单
    @main_menu = nil
    # 是否已加载菜单
    @menu_loaded = false
    # 防止循环调用
    @initializing = false
    
    # 加载扩展程序
    def self.load_extensions
      puts "开始加载扩展程序..."
      
      # 防止循环调用
      return if @initializing
      @initializing = true
      
      begin
        # 这里可以添加动态加载扩展程序的代码
        # 例如，扫描目录并加载所有可用的扩展
        
        # 初始化菜单（如果尚未初始化）
        initialize_menus_safely
        
        puts "扩展程序加载完成！"
      rescue => e
        puts "加载扩展程序时出错: #{e.message}"
        puts e.backtrace.join("\n")
      ensure
        # 确保释放循环保护标志
        @initializing = false
      end
      
      return true
    end
    
    # 安全地初始化菜单，捕获所有异常
    def self.initialize_menus_safely
      return if @menu_loaded
      
      begin
        initialize_menus
      rescue => e
        puts "初始化菜单时出错: #{e.message}"
        puts e.backtrace.join("\n")
      end
    end
    
    # 初始化菜单
    def self.initialize_menus
      # 如果菜单已加载，不再重复初始化
      return if @menu_loaded
      
      # 创建主菜单
      begin
        # 获取 Extensions 菜单
        extensions_menu = UI.menu("Extensions")
        
        # 创建线生成槽子菜单
        @main_menu = extensions_menu.add_submenu("线生成槽")
        
        # 添加打开线转槽工具菜单项
        if defined?(SuXZ::YL) && SuXZ::YL.respond_to?(:start_preview_tool)
          @main_menu.add_item("线转槽") {
            SuXZ::YL.start_preview_tool
          }
          puts "已添加'线转槽'菜单项"
        end
        

        
        # 添加参数设置菜单项
        if defined?(SuXZ::CS) && SuXZ::CS.respond_to?(:show_settings_dialog)
          @main_menu.add_item("参数设置") {
            SuXZ::CS.show_settings_dialog
          }
          puts "已添加'参数设置'菜单项"
        end
        
        # 添加分隔符
        @main_menu.add_separator
        
        # 添加"关于"菜单项
        if defined?(SuXZ::GY) && SuXZ::GY.respond_to?(:add_menu_item)
          SuXZ::GY.add_menu_item(@main_menu)
          puts "已添加'关于'菜单项"
        end
        
        # 标记为已加载
        @menu_loaded = true
        puts "菜单初始化完成"
      rescue => e
        puts "创建菜单时出错: #{e.message}"
        puts e.backtrace.join("\n")
        # 如果出错，尝试创建一个基本菜单
        begin
          @main_menu = UI.menu("Extensions").add_submenu("线生成槽")
          @menu_loaded = true
        rescue => e2
          puts "创建基本菜单时出错: #{e2.message}"
          @main_menu = nil
        end
      end
    end
    
    # 获取主菜单
    def self.main_menu
      # 如果尚未初始化，安全地初始化菜单
      initialize_menus_safely unless @menu_loaded
      @main_menu
    end
    
    # 注册子菜单项
    def self.register_menu_item(name, &block)
      # 如果尚未初始化，安全地初始化菜单
      initialize_menus_safely unless @menu_loaded
      
      # 如果主菜单不存在，输出警告并返回
      unless @main_menu
        puts "无法添加菜单项'#{name}'：主菜单不存在"
        return nil
      end
      
      # 安全地添加菜单项
      begin
        menu_item = @main_menu.add_item(name, &block)
        puts "已添加菜单项: #{name}"
        return menu_item
      rescue => e
        puts "添加菜单项'#{name}'时出错: #{e.message}"
        return nil
      end
    end
    
    # 初始化
    def self.init
      puts "扩展程序管理功能已加载"
    end
  end
  
  # 只初始化KZ模块，不调用其他可能导致问题的方法
  KZ.init
end